package logica;

import IGU.DatoRepetido;
import com.toedter.calendar.JDateChooser;
import datos.*;
import datos.Ubicacion;
import java.text.DateFormat;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToggleButton;
import java.text.SimpleDateFormat;
import winterwell.jtwitter.OAuthSignpostClient;
import winterwell.jtwitter.Twitter;

public class FuncionesGUI
{

public static void cargarSalaNueva(JTextField ID, JTextField capacidad,  JComboBox comboCines, JComboBox comboPeliculas,JTextField seleccion, JToggleButton vip)
    {
    Sala salaActual;
    Datos c = new Datos();
    int IDNum = Integer.parseInt(ID.getText());
    int capacidadNum = Integer.parseInt(capacidad.getText());
//       comboCines.getActionCommand()


//    Datos.getListaSala().agregarSala(new Sala(IDNum,capacidadNum,vip.getAutoscrolls(),null,null));
    Datos.getListaCine().imprimirColeccion();

}

public static void   agregarTelefonoNuevo(String telefono, ListaTelefono listaTelefono)
    {
     listaTelefono.agregarTelefono(new Telefono(telefono));
    }

public static void cargarCineNuevo(ListaTelefono telefono, JTextField ID, JTextField Sucursal,  JTextField Gerente, JTextField Ciudad,JTextField Direccion, JTextField Pais, JTextField horaE, JTextField minutoE, JTextField segundoE,JTextField horaS,JTextField minutoS,JTextField segundoS)
{
        int parseInt = Datos.getID()+1;
        Datos.setID(parseInt);

        int horae = Integer.parseInt(horaE.getText());
        int minutoe = Integer.parseInt(minutoE.getText());
        int segundoe = Integer.parseInt(segundoE.getText());

        int horas = Integer.parseInt(horaS.getText());
        int minutos = Integer.parseInt(minutoS.getText());
        int segundos = Integer.parseInt(segundoS.getText());

        
        Datos.getListaCine().agregarCine(new Cine(parseInt,Sucursal.getText(),Gerente.getText(),new ListaUsuario(),telefono,new ListaSala(),(new Ubicacion(Ciudad.getText(),Direccion.getText(),Pais.getText())),new ListaSnacks(),new Horario(new Tiempo(horae,minutoe,segundoe),new Tiempo(horas,minutos,segundos))));
        Datos.getListaCine().imprimirColeccion();
}


    public static void cargarListaCineEnCombo(JComboBox comboTelefonos,JComboBox comboSalas,int posicion, JTextField ID, JTextField Gerente, JTextField Direccion,JTextField Ciudad, JTextField Pais)
    {
        
              comboTelefonos.removeAllItems();
              comboSalas.removeAllItems();
              ID.setText("");
              Gerente.setText("");
              Direccion.setText("");
              Ciudad.setText("");
              Pais.setText("");



        Cine cineActual;

        if (posicion >= 0)
        {

            cineActual = Datos.getListaCine().obtenerCine(posicion);

//CARGO COMBO TELEFONOS
        int tamLista, i;
        Telefono telefonoActual;
        Sala salaActual;
        
        
        String cadenaAMostrar;
        tamLista=cineActual.getLostelefonos().getTamListaTelefono();

        for (i=0 ; i<tamLista ; i++)
        {
           telefonoActual= cineActual.getLostelefonos().obtenerTelefono(i);

            cadenaAMostrar = telefonoActual.getTelefono();
            comboTelefonos.addItem(cadenaAMostrar);
        }
//CARGO COMBO salas
        if (cineActual.getLasSalas() != null)    
        {
        tamLista=cineActual.getLasSalas().getTamListaSala();

        for (i=0 ; i<tamLista ; i++)
        {
           salaActual= cineActual.getLasSalas().obtenerSala(i);
//pasar a string
            cadenaAMostrar = Integer.toString(salaActual.getID());
            comboSalas.addItem(cadenaAMostrar);
        }
            }

            ID.setText(Integer.toString(cineActual.getID()));
            Gerente.setText(cineActual.getGerente());
            Direccion.setText(cineActual.getLaUbicacion().getDireccion());
            Ciudad.setText(cineActual.getLaUbicacion().getCiudad());
            Pais.setText(cineActual.getLaUbicacion().getPais());
//            HoraE.setText(Integer.toString(cineActual.getElHorario().getEntrada().getHora()));
//            MinE.setText(Integer.toString(cineActual.getElHorario().getEntrada().getMinuto()));
//            SegE.setText(Integer.toString(cineActual.getElHorario().getEntrada().getSegundo()));
//            HoraS.setText(Integer.toString(cineActual.getElHorario().getSalida().getHora()));
//            MinS.setText(Integer.toString(cineActual.getElHorario().getSalida().getMinuto()));
//            SegS.setText(Integer.toString(cineActual.getElHorario().getSalida().getSegundo()));

            

        }
    }
             public static void cargarListaCinesEnCombo(JComboBox combo, boolean borrarCombo)
    {
        int tamLista, i;
        Cine cineActual;
        String cadenaAMostrar;

        if (borrarCombo)
            combo.removeAllItems();
           tamLista = Datos.getListaCine().getTamListaCine();
          System.out.print(tamLista);

        for (i=0 ; i<tamLista ; i++)
        {
            cineActual = Datos.getListaCine().obtenerCine(i);

                cadenaAMostrar = cineActual.getNombre();
                combo.addItem(cadenaAMostrar);
        }
    }

     public static void cargarInformacionPelicula(JComboBox comboReparto, JComboBox comboDirectores,int posicion, JTextField nombre, JTextField NombreOriginal, JTextField Guionista,JTextField Productora, JTextField Genero , JTextField Duracion, JTextField Año, JTextArea Sinopsis, JTextField Idioma, JTextField Subtitulos, JTextField Rankining,JLabel path)
    {
        Pelicula peliculaActual;
        nombre.setText("");
        NombreOriginal.setText("");
        Guionista.setText("");
        Productora.setText("");
        Genero.setText("");
        Año.setText("");
        Sinopsis.setText("");
        Idioma.setText("");
        Subtitulos.setText("");
        Rankining.setText("");
        comboReparto.removeAllItems();
        comboDirectores.removeAllItems();
        inicializarCombo (comboDirectores, "Ver Directores");
        inicializarCombo (comboReparto, "Ver Reparto");

        if (posicion >= 0)
        {
            peliculaActual = Datos.getListaPelicula().obtenerPelicula(posicion);
            nombre.setText(peliculaActual.getNombreEsp());
            NombreOriginal.setText(peliculaActual.getNombreOrg());
            Guionista.setText(peliculaActual.getGuionista());
            Productora.setText(peliculaActual.getProductora());
            Genero.setText(peliculaActual.getGenero());
            String dato =Integer.toString(peliculaActual.getAñoLanz());
            Año.setText(dato);
            Productora.setText(peliculaActual.getProductora());
            Sinopsis.setText(peliculaActual.getSinopsis());
            Idioma.setText(peliculaActual.getIdioma());
            dato =Integer.toString(peliculaActual.getRaking());
            Subtitulos.setText(peliculaActual.getSubtitulo());
            Rankining.setText(dato);

            try{

                path.setIcon(new ImageIcon(peliculaActual.getPathImagen()));
            }
            catch (Exception e){
                System.out.println("ERROR AL LEER PATH");
            }
//CARGO COMBO ACTORES
        int tamLista, i;
        Actor actorActual;
        Director directorActual;
        String cadenaAMostrar;
       tamLista = peliculaActual.getLosActores().getTamListaActores();
        for (i=0 ; i<tamLista ; i++)
        {
            actorActual = peliculaActual.getLosActores().obtenerActor(i);
            cadenaAMostrar = actorActual.getNombreActor();
            comboReparto.addItem(cadenaAMostrar);
        }
 //CARGO COMBO DIRECTORES
          tamLista = peliculaActual.getLosDirectores().getTamListaDirectores();
        for (i=0 ; i<tamLista ; i++)
        {
            directorActual = peliculaActual.getLosDirectores().obtenerDirector(i);
            cadenaAMostrar = directorActual.getNombreDirector();
            comboDirectores.addItem(cadenaAMostrar);
        }
      }
  }



    public static void cargarListaPeliculasEnCombo(JComboBox combo, boolean borrarCombo)
    {
        int tamLista, i;
        Pelicula peliculaActual;
        String cadenaAMostrar;

        if (borrarCombo)
            combo.removeAllItems();

        tamLista = Datos.getListaPelicula().getTamListaPelicula();

        System.out.print(tamLista);
        
        for (i=0 ; i<tamLista ; i++)
        {
            peliculaActual = Datos.getListaPelicula().obtenerPelicula(i);

                cadenaAMostrar = peliculaActual.getNombreEsp();
            combo.addItem(cadenaAMostrar);
        }
    }
 

    public static void inicializarCombo(JComboBox combo, String texto)
    {
        combo.addItem(texto);
    }

    public static void habilitarVentana(JFrame ventana, boolean habilitar, boolean mantenerVentana)
    {
        if (habilitar)
        {
            ventana.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            ventana.setEnabled(true);
            ventana.setFocusable(true);
        }
        else
        {
            ventana.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
            ventana.setEnabled(false);
            ventana.setFocusable(false);
        }

        ventana.setVisible(mantenerVentana);
    }

    public static void ventanaSiempreEnTope(JFrame ventana, boolean siempreEnTope)
    {
        ventana.setAlwaysOnTop(siempreEnTope);
    }

    public static void cargarPeliculaNueva(ListaActores reparto, ListaDirectores directores, JTextField nombre, JTextField nombreOriginal, JTextField guionista, JTextField productora,JTextField genero,JTextField duracion,JTextField lanzamiento,JTextField idioma,JTextField subtitulos,JTextArea sinopsis,String path)
      
       {
        int laDuracion = Integer.parseInt(duracion.getText());
        int elLanzamiento = Integer.parseInt(lanzamiento.getText());
        int iD = Datos.getID();
        Datos.getListaPelicula().agregarElemento(new Pelicula(iD,nombreOriginal.getText(), nombre.getText(), guionista.getText(), productora.getText(), genero.getText(), laDuracion, elLanzamiento, sinopsis.getText(), idioma.getText(), subtitulos.getText(), 0, path, reparto, directores));
        Datos.setID(iD+1);
       }

    public static void agregarActorNuevo(String nombreActor, ListaActores listaReparto) {
        listaReparto.agregarElemento(new Actor(nombreActor,Datos.getID()));
    }

    public static void agregarDirectorNuevo(String nombreDirector, ListaDirectores listaDirectores) {
        listaDirectores.agregarElemento(new Director(nombreDirector,Datos.getID()));

    }

    public static void cargarPeliculaEnSala(Pelicula laPelicula,int posicion,JLabel path) {

        if (posicion >= 0)
        {
          try{

                path.setIcon(new ImageIcon(Datos.getListaPelicula().obtenerPelicula(posicion).getPathImagen()));
            }
          catch (Exception e){
                System.out.println("ERROR AL LEER PATH");
            }

       laPelicula=Datos.getListaPelicula().obtenerPelicula(posicion);

        }
}

    public static void cargarPeliculaSeleccionadaEnLista(Pelicula laPelicula, ListaPelicula lasPelis){
        lasPelis.agregarElemento(laPelicula);
    }

public static void AgregarNuevaFuncion(int posicionSala, int posicionCine,int posicionPelicula,int id,int duracion){
System.out.println("despues");

    Datos.getListaCine().obtenerCine(posicionCine).getLasSalas().obtenerSala(posicionSala).getPeliculasProyectadas().agregarFuncion(new Funcion(id, Datos.getListaCine().obtenerCine(posicionCine).getLasSalas().obtenerSala(posicionSala), Datos.getListaPelicula().obtenerPelicula(posicionPelicula), new ListaUsuario()));
System.out.println("mucho despues");
}

    public static void cargarListaFuncionesEnCombo(JComboBox jCBListaPeliculasProyectadas, boolean borrarCombo) {





    }


    public static void AgregarNuevaFuncion(JTextField jTid, JTextField jTDuracion, ListaPelicula listaPelicula) {

    }

    public static void AgregarNuevaSala(int posicion, JTextField jTid, JTextField jTCapacidad, Cine elCine, boolean vip) {

         if (posicion >= 0){
         Datos.getListaCine().obtenerCine(posicion).getLasSalas().agregarSala(new Sala(Integer.parseInt(jTid.getText()),Integer.parseInt(jTCapacidad.getText()),vip,Datos.getListaCine().obtenerCine(posicion),new ListaFuncion()));
        }

    }

    public static Cine DameElCine(int posicion) {
            if (posicion >= 0)
        {
                System.out.println("esta es la posicion del cine: "+posicion);
                return Datos.getListaCine().obtenerCine(posicion);

        }
          System.out.println("el cine es null y su pos es: "+posicion);
           return null;
    }

        public static Boolean cargarListaSalasEnCombo(int posicion, JComboBox combo, boolean borrarCombo)
    {
        Cine elCine;

         if (posicion >= 0)
        {
         elCine=Datos.getListaCine().obtenerCine(posicion);


        int tamLista, i;
        Sala salaActual;
        String cadenaAMostrar;

        if (borrarCombo)
            combo.removeAllItems();

        if(elCine.getLasSalas()!=null)
        {
        tamLista = elCine.getLasSalas().getTamListaSala();

        System.out.print(tamLista);
        
        for (i=0 ; i<tamLista ; i++)
        {
            salaActual = elCine.getLasSalas().obtenerSala(i);
            
            cadenaAMostrar = Integer.toString(salaActual.getID());
            combo.addItem(cadenaAMostrar);
        }
        return true;
       }
        else return false;
      }
        return false;
    }
    
    
    public static void cargarCineEnFuncion(int laPosicion,JComboBox comboSalas, Funcion laFuncion) {
         
        cargarListaSalasEnCombo(laPosicion,comboSalas,false);
//        laFuncion = Datos.getListaCine().obtenerCine(posicion);
    }

    public static void cargarListaSalaEnCombo(int posicionCine,JComboBox combo, boolean borrarCombo) {
        
         int tamLista, i;
//        Cine cineActual;
        String cadenaAMostrar;
        
        Sala salaActual;

        if (borrarCombo)
            combo.removeAllItems();
           tamLista = Datos.getListaCine().obtenerCine(posicionCine).getLasSalas().getTamListaSala();
           
//                   Datos.getListaCine().getTamListaCine();
          System.out.print(tamLista);

        for (i=0 ; i<tamLista ; i++)
        {
            salaActual = Datos.getListaCine().obtenerCine(posicionCine).getLasSalas().obtenerSala(i);

            
                 cadenaAMostrar = Integer.toString(salaActual.getID());
                combo.addItem(cadenaAMostrar);
        }
    }

    public static boolean ValidateAndAddUser(JTextField JTnombre, JTextField JTapellido, JTextField JTtwitter, JDateChooser jDateNacimiento, JTextField JTNickName, JPasswordField JTPassword) {
        if((JTnombre.getText().equals("")) ||  (JTapellido.getText().equals("")) || (JTtwitter.getText().equals("")) || (jDateNacimiento.getDateFormatString().equals("")) || (JTNickName.getText().equals("")) || (JTPassword.getText().equals("")))
        {
       return false;
        }
 else
        {
            System.out.println(jDateNacimiento.getDateFormatString());
            //agrego mi usuario ojo FALTAN LOS GUSTOS
            if (Datos.getListaUsuario().agregarUsuario(new Usuario(JTtwitter.getText(),new Cuenta(JTPassword.getText(),JTNickName.getText()),JTnombre.getText(),JTapellido.getText(),jDateNacimiento.getDate(),50,null)) ==false)
            {
                return false;
            }
            Datos.getListaUsuario().agregarUsuario(new Usuario(JTtwitter.getText(),new Cuenta(JTPassword.getText(),JTNickName.getText()),JTnombre.getText(),JTapellido.getText(),jDateNacimiento.getDate(),50,null));
            System.out.println("Usuarios de GUI: ");
            Datos.getListaUsuario().imprimirColeccion();

            return true;
        }
    }

         public static boolean esUsuario(JTextField jNick, JPasswordField jPassword) {

        //si retorna null no lo encontro!
            System.out.println("entre en esUsuario");
            System.out.println(jPassword.getText());
            if ( jNick.getText().equals("") || jPassword.getText().equals("") || (Datos.getListaUsuario().obtenerUsuario(new Cuenta(jPassword.getText(),jNick.getText()))==null)){
                return false;
        }
                return true;
    }

    public static boolean esAdmin(JTextField jNick, JPasswordField jPassword) {
         System.out.println("entre en esAdmin");
            System.out.println(jPassword.getText());
        int permisologia = Datos.getListaUsuario().obtenerUsuario(new Cuenta(jPassword.getText(), jNick.getText())).getPermisologio();
            if(permisologia<100){
        return false;
        }
            return true;
    }

    public static void cargarListaUsuariosEnCombo(JComboBox combo, boolean borrarCombo) {
        int tamLista, i;
        Usuario usuarioActual;
        String cadenaAMostrar;

        if (borrarCombo)
            combo.removeAllItems();

        tamLista = Datos.getListaUsuario().getTamListaUsuario();

        for (i=0 ; i<tamLista ; i++)
        {
            usuarioActual = Datos.getListaUsuario().obtenerUsuario(i);
                cadenaAMostrar = usuarioActual.getNombre()+" "+usuarioActual.getApellido();
            combo.addItem(cadenaAMostrar);
        }


    }

    public static void cargarInformacionUsuarios(int posicion, JTextField JTNickName, JTextField JTnombre, JTextField JTapellido, JTextField JTtwitter1, JTextField JTfechaN,JTextField permisologia, JComboBox jCBGustos) {
        Usuario usuarioActual;






         if (posicion >= 0)
        {
            usuarioActual = Datos.getListaUsuario().obtenerUsuario(posicion);
            JTNickName.setText(usuarioActual.getLaCuenta().getNick());
            JTnombre.setText(usuarioActual.getNombre());
            JTapellido.setText(usuarioActual.getApellido());
            JTtwitter1.setText(usuarioActual.getTwitter());
            SimpleDateFormat df = new SimpleDateFormat("dd/mm/yyyy");
           if(usuarioActual.getFechaN()!=null)
           {
           JTfechaN.setText(df.format(usuarioActual.getFechaN()));
           }
            permisologia.setText(Integer.toString(usuarioActual.getPermisologio()));
        }

    }

    public static void EnviarMensaje(int i, String text) {

        OAuthSignpostClient oauthClient = new OAuthSignpostClient("OU6j6D3Sfot98OYMzG3NVw","w8Cn58BQKxkx0VjhPv9OqDyPEDGV8uOm0Lq847DfEM", "oob");

        oauthClient.authorizeDesktop();
        String v = oauthClient.askUser("Please enter the verification PIN from Twitter");
        oauthClient.setAuthorizationCode(v);
        String[] accessToken = oauthClient.getAccessToken();

    // Twitter object
        Twitter twitter = new Twitter("my-name", oauthClient);
        // Enviar el twee
        //twitter.setStatus(text);
        String elTwitter = Datos.getListaUsuario().obtenerUsuario(i).getTwitter();
        
        //supongo que recibe el twitter y el mensaje, luego lo envia...
        twitter.sendMessage(elTwitter, text);

        // De esta manera se puede obtener el status de un usuario de twitter
   //System.out.println(twitter.getStatus("cristian_alj"));
    }

    public static void EliminarSucursal(int Posicion) {

        Datos.getListaCine().removerCine(Datos.getListaCine().obtenerCine(Posicion));

    }

    public static void EliminarSala(int posicionCine, int posicionSala) {
        Datos.getListaCine().obtenerCine(posicionCine).getLasSalas().removerSala(Datos.getListaCine().obtenerCine(posicionCine).getLasSalas().obtenerSala(posicionSala));
    }

        public static void EliminarFuncion(int posicionCine, int posicionSala, int posicionFuncion) {
       Datos.getListaCine().obtenerCine(posicionCine).getLasSalas().obtenerSala(posicionSala)
               .getPeliculasProyectadas().removerFuncion(Datos.getListaCine().obtenerCine(posicionCine)
               .getLasSalas().obtenerSala(posicionSala).getPeliculasProyectadas().obtenerFuncion(posicionFuncion));
    }

    public static boolean cargarListaFuncionesEnCombo(int posicionCine, int posicionSala, JComboBox combo, boolean borrarCombo) {

        Cine elCine;
        Sala laSala;

         if (posicionCine >= 0 && posicionSala >= 0)
        {
         elCine=Datos.getListaCine().obtenerCine(posicionCine);
         laSala=elCine.getLasSalas().obtenerSala(posicionSala);

        int tamLista, i;
        Funcion funcionActual;
        String cadenaAMostrar;

        if (borrarCombo)
            combo.removeAllItems();

        if(elCine.getLasSalas()!=null)
        {
        tamLista = laSala.getPeliculasProyectadas().getTamListaFuncion();

        System.out.print(tamLista);

        for (i=0 ; i<tamLista ; i++)
        {
            funcionActual = laSala.getPeliculasProyectadas().obtenerFuncion(i);

            cadenaAMostrar = funcionActual.getLaPelicula().getNombreEsp();
            combo.addItem(cadenaAMostrar);
        }
        return true;
       }
        else return false;
      }
        return false;


    }











}
